# 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 的那 两个 整数，并返回它们的数组下标。
#
#  你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
#
#  你可以按任意顺序返回答案。
# 示例 1：
#
# 输入：nums = [2,7,11,15], target = 9
# 输出：[0,1]
# 解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。
# 示例 2：
#
# 输入：nums = [3,2,4], target = 6
# 输出：[1,2]
# 示例 3：
#
# 输入：nums = [3,3], target = 6
# 输出：[0,1]
#  
#
# 提示：
#
# 2 <= nums.length <= 103
# -109 <= nums[i] <= 109
# -109 <= target <= 109
# 只会存在一个有效答案
# 通过次数1,970,149提交次数3,869,640

# leetcode submit region begin(Prohibit modification and deletion)
# 解法一： 哈希-20ms
class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        # 模拟哈希创建字典
        hash_dict = {}

        # 遍历数组（同时给数组元素标出索引）
        for index, num in enumerate(nums):

            # 判断字典是否存在相加等于目标值的
            sec_index = hash_dict.get(target - num)

            # 若存在
            if sec_index is not None:
                return [index, sec_index]

            # 若不存在（即不跑if语句，将该值和索引扔进字典里，供数组下一个遍历值与字典里的值进行计算，ps:需要脑筋转一转）
            hash_dict[num] = index


# 解法二：两个for循环（24ms）
# class Solution(object):
#     def twoSum(self, nums, target):
#         """
#         :type nums: List[int]
#         :type target: int
#         :rtype: List[int]
#         """
#
#         # 计算数组长度
#         length = len(nums)
#
#         # 遍历第一个数字的索引
#         for index in range(length):
#
#             # 遍历第二个数字的索引
#             for sec_index in range(index + 1, length):
#
#                 # 如果两个数字相加等于目标值
#                 if nums[index] + nums[sec_index] == target:
#                     return index, sec_index








